package virtualpostit.com;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import model.CryptMD5;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

/**
 * Attività che permette all'utente di crearsi un nuovo account. L'account deve essere
 * correttamente creato immettendo tutti i campi richiesti per la registrazione.
 * 
 * @author Gruppo Capo, De Notaris, Pastore e Vento
 * @since Luglio 2011
 */
public class NewAccountActivity extends Activity implements OnClickListener,Observer {

	// Attributo di classe
	private static final String DEB_TAG = "NewAccountActivity";

	@Override
	public void onCreate(Bundle icicle) {
		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
		super.onCreate(icicle);
		setContentView(R.layout.signup);
		Button newAccount = (Button) findViewById(R.id.newaccount_button);
		Log.i(DEB_TAG, "onCreate");
		newAccount.setOnClickListener(this);
	}

	/*
	 * @see android.view.View.OnClickListener#onClick(android.view.View)
	 */
	@Override
	public void onClick(View v) {
		boolean cryptError=false;
		Log.i(DEB_TAG + " onClick ", "onClick");
		EditText nameEditText = (EditText) findViewById(R.id.txt_name);
		EditText surnameEditText = (EditText) findViewById(R.id.txt_surname);
		EditText usernameEditText = (EditText) findViewById(R.id.txt_newusername);
		EditText passwordEditText = (EditText) findViewById(R.id.txt_newpassword);
		EditText repeatPasswordEditText = (EditText) findViewById(R.id.txt_repassword);
		String sName = nameEditText.getText().toString();
		String sSurName = surnameEditText.getText().toString();
		String sUserName = usernameEditText.getText().toString();
		String sPassword = passwordEditText.getText().toString();
		String sRepeatPassword = repeatPasswordEditText.getText().toString();
		MyDialog md = new MyDialog(this);
		if (sName.trim().equals("") ||  sSurName.trim().equals("") || sUserName.trim().equals("") || sPassword.trim().equals("")) {
			md.showDialog("Attenzione", "I dati inseriti non sono completi",R.drawable.warning);
		} else if (!sPassword.equals(sRepeatPassword)) {
			md.showDialog("Attenzione",	"Le password inserite non corrispondono.",R.drawable.warning);
		} else {
			String address = LoginActivity.SERVER_HOST + ":"+ LoginActivity.SERVER_PORT;
			Log.i(DEB_TAG, "Username: " + sUserName + "Password: " + sPassword);
			Log.i(DEB_TAG, "Requesting to " + address);
			WebService signup = new WebService(address);

			// Creiamo coppie chiave-valore per l'username e per la password
			ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
			params.add(new BasicNameValuePair("username", sUserName));
			params.add(new BasicNameValuePair("surname", sSurName.substring(0, 1).toUpperCase() + sSurName.substring(1).toLowerCase()));
			params.add(new BasicNameValuePair("name", sName.substring(0, 1).toUpperCase() + sName.substring(1).toLowerCase()));

			try {
				params.add(new BasicNameValuePair("password", CryptMD5.MD5(sPassword)));
			} catch (NoSuchAlgorithmException e1) {
				Log.i("Errore", e1.getMessage());
				cryptError=true;
			} catch (UnsupportedEncodingException e1) {
				Log.i("Errore", e1.getMessage());
				cryptError=true;
			}
			if (!cryptError){
				String response = signup.webPost("/signup.php", params);
				String r = response.replace("\n", "").replace("\"", "");

				try {
					Log.i("response", r);
					if (r.equals("connection_error")) {
						md.showDialog("Attenzione",	"Connessione al servizio fallita",R.drawable.error);
					} else if (r.equals("null_error")) {
						md.showDialog(	"Attenzione","Username e/o password selezionati non sono disponibili. Riprova",	R.drawable.error);
					} else { // Registrazione effettuata con successo
						md.addObserver(this);
						md.showDialog("Registrazione","Registrazione avvenuta con successo",R.drawable.ok);						
					}

				} catch (Exception e) {
					Log.i("Errore", e.getMessage());
					md.showDialog("Attenzione","Errore del server, riprovare più tardi",R.drawable.error);
				}
			}else {
				md.showDialog("Attenzione","Errore inaspettato, riprovare più tardi",R.drawable.error);
			}

		}
	}

	/*
	 * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
	 */
	@Override
	public void update(Observable observable, Object data) {
		finish();
	}



}